package persistencia.dao;

import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

public class Criterios {

    /**
     * @param clasePersistente
     * @return
     */
    public static DetachedCriteria crearCriterioVacio(Class clasePersistente) {
        return DetachedCriteria.forClass(clasePersistente);
    }

    public static void addRestricctionId(DetachedCriteria criterio, Long id) {
        criterio.add(Restrictions.idEq(id));
    }
    
    public static void addRestricctionAND(DetachedCriteria criterio, String propiedad, Object valor){
        criterio.add(Restrictions.eq(propiedad, valor));
    }

    public static void addRestricctionRango(DetachedCriteria criterio, 
                                            String propiedad, Float minimo, 
                                            Float maximo) {
        criterio.add(Restrictions.between(propiedad, minimo, maximo));
    }

    /**
     * 
     * @param listString Lista de String que almacena las palabras a buscar.
     * @return DetachedCriteria para buscar los productos cuya propiedad coincide con los string que se pasan en la lista.
     */
    public static void buscarPropiedadOr(DetachedCriteria criterio, 
                                         String propiedad, 
                                         List<String> listString) {
        Disjunction  d = Restrictions.disjunction();
        for (String cadena: listString) {
            d.add(Restrictions.eq(propiedad, cadena));
        }
        
        criterio.add(d);
    }
    
    public static void ordenAscendente(DetachedCriteria criterio, String propiedad){
        Order c = Order.asc(propiedad);
        criterio.addOrder(c);
    }
    
    public static void ordenDescendente(DetachedCriteria criterio, String propiedad){
        Order c = Order.desc(propiedad);
        criterio.addOrder(c);
    }
}
